LEVEL DATA Level information for World 1 is from $A200-$B872, though it looks like there's free space from $A200-$B8D7, if needed. Level information for World 2 is from $56CD-$65D2, while level information for World 4 is from $65D3-$7DAD, though there's a decent amount of free space, up to $7FFD. The information for worlds 2 and 4 run together, and you could likely use more space for World 4 by using less for World 2, and vice versa. Level information in World 3 is from $D22C-$E416. No additional free space this time. And here is the data that determines the screen order: each "screen" is two bytes; specifically, the address of the start of the screen you want to use for that "screen" of the level. If desired, you can start the screen after any occurance of FE without trouble, though it's easiest to design levels by just working with individual screens of twenty FEs. The four bytes before the screen order for the levels is for the screen you would like to use for up to two bonus rooms. 1-2, 2-3, and 4-3 have this as well, even though you cannot add bonus rooms for those levels. Maybe with ASM, but that's above my level here. Note that the addresses, for some reason, are listed as 4000 lower than they truly are for World 1, and 8000 lower for World 3. No idea why, but they are. SCREEN ORDER 1-1: $A198-$A1B5 1-2: $A1BD-$A1D8 1-3: $A1E0-$A1FD 2-1: $55C1-$55E0 2-2: $55E8-$5603 2-3: $560B-$562E 3-1: $D045-$D072 3-2: $D07A-$D099 3-3: $D0A1-$D0BE 4-1: $5636-$5663 4-2: $566B-$5692 4-3: $569A-$56C9 As for editing the levels--or screens themselves, each screen is made up of 20 vertical lines. The information for each vertical line ends in FE. A vertical line with no objects would simply have another FE after the previous FE. Objects you want to use require at least two bytes: one for the vertical location in that line, and another for the actual object. Let's see if I can word this better, 'cause that's confusing even for me to look at. For the first byte, you'd have to have something like, say, E2. The E is the vertical height for the object, and the 2 is the number of objects you're going to have. After the E2, you would have two more bytes, to indicate the two objects at the E and F heights. Probably ground tiles in this case. And of course, you'd put FE after you've put all the objects you want for that vertical line. ------------------------------------------------------------------------------------------------------------------ ENEMIES Each enemy is three bytes, looking enemy looks something like this: 19 8F 04 The first byte is for the horizontal position, by pixels. Each screen has 0A "spaces." The checkpoints at every level are at 00, 28, 50, 78, A0, and C8, for your convenience, if you have trouble keeping track of where in the level you're placing enemies: they're useful points of reference. It is important to place the enemies in the same horizontal order they appear in the level, or the spites can mess up. The second byte is, mostly, the vertical position. 0F is actually ground level. 4F, 8F, and CF can also be used to fine-tune the horizontal positioning a little more. Also, 4x and Cx should be used for Piranha Plants and Bullet Bill cannons so that they appear correctly. Jumping fish start start at 13, 53, 93, or D3, depending on how you want it to be aligned horizontally. The third byte is the specific enemy. A list of common enemies is below. And below is the location for the enemies, and other non-power-up sprites for each level. Tempting as it is, you are not allowed to use fewer enemies in one level to add more to another. It's really annoying in 3-3, which uses way too few sprites. 1-1: $A002-$A070 1-2: $A073-$A0FC 1-3: $A0FE-$A18D 2-1: $5179-$5220 2-2: $5222-$5299 2-3: $529B-$530F 3-1: $CE74-$CF1B 3-2: $CF1D-$CFD6 3-3: $CFD8-$D03D 4-1: $5311-$5403 4-2: $5405-$54D3 4-3: $54D5-$55B8 And the enemy list. Add 8 to the first digit to have an enemy appear in hard mode only. Like 80 would be a Goomba that only appears in hard mode, A4 would be a jumping seahorse that appears only in hard mode, etc. This also applies to the moving platforms, despite that the original game never had hard mode-only moving platforms. 00: Goomba. 02: Piranha Plant. 03: Infinite giant boulders. 04: Bomb Koopa. 06: Pipe fist. 08: Sphinx boss. 09: Bubble-spitting flower. 0A: Vertically moving platform. 0B: Horizontally moving platform. 0C: Stone that falls after a few seconds, used in 1-3. 0E: Fly (world 1) or jumping spider (world 3)--same enemy, different graphics for it. 10: Jumping skeleton fish. 16: Head-throwing robot. 1A: Seahorse boss. 1D: Swimming seahorse. 24: Jumping seahorse. 25: Descending ceiling spider. 2F: Triple fish. 31: Really really fast running stone head. 32: Stone head boss. 35: Falling stalactite. 36: Platform that falls when stepped on. 38: Diagonally moving platform. 39: Diagonally moving platform. Can't think which was which. 3A: Skinny vertically moving platform. 3B: Skinny horizontally moving platform. 3C: Flying stone head. 3F: Sphinx (world 1) or snake (world 4)--same enemy, different graphics for it. 42: Flying arrow-dropping bee. 47: Single giant boulder. 48: Seahorse invincible fireball protector. 49: Bullet Bill cannon. 52: Airplane gunner. 53: Flying chicken. 54: Roto-Disc. 55: Upside-down Piranha Plant. 56: Jumping zombie ninja. 61: Cloud boss. ------------------------------------------------------------------------------------------------------------------ PIPES $D0CA starts pipe information. The pipe information has six bytes. Like for the first bonus pipe room in 1-1, the bytes are as follows: 05 01 01 06 18 88 The first byte is the screen number where you can enter the pipe. Keep in mind that the first screen of the level if 03, the second screen is 04, the third 05, et cetera. The second byte is the horizontal location for the left side of the pipe. There must be a pipe here: if there is no pipe at this location, Mario will not just enter whatever ground is there. The third pipe indicates where the pipe will lead. Only 01 or 02 should be used; these indicate two bonus rooms. If the third byte above were changed to 02, then the first bonus room in level 1-1 would be identical to the second. Values above 02 should not be used: these lead to either single screens of a level that cannot be completed, garbage screens, or other random stuff you don't want. The fourth byte indicates the screen you'll wind up at when you exit the bonus room. Notice that this does not have to be the same as the first byte: you can exit on a different screen that you entered from! However, if you exit the bonus room from a part of the level that comes before the bonus room, you will be able to re-enter, unlike when you exit the bonus room from the screen you entered. The fifth and sixth bytes are the horizontal and vertical positions that you'll appear on the screen when you exit the bonus room. It seems to go by pixels from the left for the first byte, and pixels from the top for the second byte. Pipes cannot be used in 1-2, 2-3, or 4-3: some sort of fancier hacking may be able to get usable bonus rooms for those levels, but those levels are skipped in the data. The other nine levels can have up to two bonus rooms each. ------------------------------------------------------------------------------------------------------------------ ITEMS $D13F starts the information for items! Each item has three bytes. The first mushroom in 1-1 has this: 04 02 28 The first byte indicates the screen number that the item is in. There can be more than one item on the same screen. Keep in mind that the screens, again, start with 03 at the very start of the level. The second byte indicates the horizontal position of the item on the screen. No vertical assignment necessary: the item will automatically put itself in the brick, ?-block, or invisible block object (?) on that vertical line. If there is more than one such block on the same vertical line, the item will always be in the top-most block. You cannot have two items on the same vertical line, even if there are two blocks on the vertical line. The third byte indicates the item inside the box. 28 is for a mushroom, 2A for a 1-up heart, 2C for a star, C0 for a multiple coin box, 07 for a rising platform, and F0 for a "blank" box: this is usually used to make invisible blocks appear, but it can be used for normal bricks and ?-blocks as well. There is probably a special invisible block object that must be used in the main layout of the screen itself for F0 to be used as a normal invisible block, though. Enemies can be placed inside bricks and ?-blocks, but they do not seem to harm Mario, and Mario cannot kill them, either. Any ?-block not assigned to an item will always have 1 coin. Any brick without an item assigned will always be a regular brick.